/**
 * 弹窗提示
 */
class alert {
    /**
     * 消息弹窗提示
     * @param msg         提示内容
     * @param showCancel  是否显示取消按钮，默认为 true
     * @param okLabel     确定按钮的文字，默认为"确定"
     * @param cancel      取消按钮的文字，默认为"取消"
     * @returns           Promise
     */
    confirm(msg: string, showCancel?: boolean, okLabel = '确定', cancel = '取消') {
        return new Promise((resolve, reject) => {
            uni.showModal({
                content: msg,
                showCancel: showCancel || true,
                confirmText: okLabel,
                cancelText: cancel,
                success(res) {
                    if (res.confirm) {
                        resolve(true);
                    } else if (res.cancel) {
                        reject(false);
                    }
                },
            });
        });
    }

    /**
     * 提示消息
     * @param msg         提示内容
     * @param showCancel  是否显示取消按钮，默认为 false
     * @param okLabel     确定按钮的文字，默认为"确定"
     * @returns           Promise
     */
    info(msg: string, showCancel?: boolean, okLabel?: string) {
        return new Promise((resolve, reject) => {
            uni.showModal({
                title: '提示',
                content: msg,
                showCancel: showCancel || false,
                confirmText: okLabel || '确定',
                success(res) {
                    if (res.confirm) {
                        resolve(true);
                    } else if (res.cancel) {
                        reject(false);
                    }
                },
            });
        });
    }

    /**
     * 警告提示
     * @param msg         提示内容
     * @param showCancel  是否显示取消按钮，默认为 false
     * @param okLabel     确定按钮的文字，默认为"确定"
     * @returns           Promise
     */
    warning(msg: string, showCancel?: boolean, okLabel?: string) {
        return new Promise((resolve, reject) => {
            uni.showModal({
                title: '警告',
                content: msg,
                showCancel: showCancel || false,
                confirmText: okLabel || '确定',
                success(res) {
                    if (res.confirm) {
                        resolve(true);
                    } else if (res.cancel) {
                        reject(false);
                    }
                },
            });
        });
    }

    /**
     * 成功提示
     * @param msg         提示内容
     * @param showCancel  是否显示取消按钮，默认为 false
     * @param okLabel     确定按钮的文字，默认为"确定"
     * @returns
     */
    success(msg: string, showCancel?: boolean, okLabel?: string) {
        return new Promise((resolve, reject) => {
            uni.showModal({
                title: '成功',
                content: msg,
                showCancel: showCancel || false,
                confirmText: okLabel || '确定',
                success(res) {
                    if (res.confirm) {
                        resolve(true);
                    } else if (res.cancel) {
                        reject(false);
                    }
                },
            });
        });
    }

    /**
     * 错误提示
     * @param msg     提示内容
     */
    error(msg: string) {
        uni.showModal({
            content: msg,
            showCancel: false,
        });
        throw new Error(msg);
    }
}

export default new alert();
